═══ 1. Installation Help ═══ When Pmcomm is shipped there are two different versions on the disk. The two versions are Pmcomm version 1.05 and 1.09. The 1.09 version is to be used if using a copy of OS/2 that is 1.2 or later. For OS/2 1.1 Pmcomm 1.05 must be used. The two directories on the disk are Pmcom105 and Pmcom109, copy the appropriate directory to your hard drive. Also, copy RxPmcomm.dll into a .dll directory (i.e. C:\os2\dll). Pmcomm can be run from a command line by typing pmcomm, but it is recommended that it be installed in a "Group". To do this access the Program menu on the "Group" menu and chose the New option. This will bring up a dialog box where the following information must be entered. Program title: Pmcomm Path and filename: user_specified_path\pmcomm.exe Parameters: setup.dat Working directory: user_specified_path Program type: Presentation Manager The final step is to select the Add option at the bottom of the dialog box. Note: setup.dat will be created if not in existence. There is a program called timer.exe in the Pmcom109 directory that will allow you to execute Pmcomm at specifed times. This will allow you to set up a script to have Pmcomm dial numbers at certain times and capture mail, download files, ect. To install Pmcomm's Host Mode see Installing_Pmcomm_Host_Mode. ═══ 2. Extended Help ═══ There is a collection of utilities in the File section such as; Scripts, Capture, Print, Copy, and Paste. There is also an About box that has information on Multi-Net Communications, the company that wrote this software. In the Edit section there are commands such as Copy, Paste, and Clear_Screen. These commands will help you manipulate on-screen information. The Connect command allows you to connect to another computer, either through a modem, using the Dial command or direct connect, using the Send_Break command. Transfer allows the use of different protocols to send and receive files to or from a remote computer. The protocol options are Xmodem_Checksum, Xmodem_CRC, 1K-Xmodem, Ymodem(batch), Ymodem-g(batch), Zmodem, Kermit, CISB, ASCII, and IND$FILE (for downloads). Zmodem is probably the best selection when available on the remote computer. Ymodem-G should only be used with error correcting modems. Hang-up sends the hang-up command string (see the Option menu) and optionally drops the DTR line to the modem. Dropping DTR is the most effective if your modem is setup to hang-up when DTR is dropped. Using a hang-up string is also slower, because Pmcomm has to get the modem into the command state before sending the hang-up string. If you have DTR on and delete the hangup string the hang-up will be much faster. Option allows you to tailor Pmcomm to your own tastes. The areas in option are Port, Dial_Setup, Modem, Protocols, Paths, Macros_Setup, Screen, Status_Line, Terminal, and Chat. The setup is not automatically saved. This allows you to change things temporally without changing your default setup file. If you do want to make the changes permanent be sure to save the setup file. To save the current setup file, use the Save_setup command under the File menu option. Macros allows you to pick, with a mouse, the macro you wish to send. Macros can also be selected with an Alt+corresponding number keystroke. Pmcomm allows you to set up ten different macros. Scripts can be executed from macros by using the shell command. An example of this would be: shell("c:\pmcomm\plane.cmd"); This would execute the REXX script called plane.cmd. This allows you a quick and easy way to execute often used scripts. ═══ 2.1. Keys Help ═══ The following is a list of "Hot keys" available. F1 = Help. F3 = Exit. Alt-D = Dialing directory. Alt-H = Hangup. Alt-Q = Dial Queue entries. Alt-X = Exit. Ctrl-Break = Send break. Ctrl-Insert = Copy. Shift-Insert = Paste. Page-Dn = Download. Page-Up = Upload. Print Scrn = Prints text in the visible window (full line length). The up and down arrow keys default to scrolling the window. You can change this in the setup terminal dialog box so that when in ANSI mode the arrow keys will be sent to the modem. In VT100 mode, some keys have been changed to try to closely emulate the VT100 keyboard. F1-F4 are now the PF keys. Because of this the F1 key will not display the normal help, and F3 will not exit the program. The PF keys will send the following characters: F1 = ESCOP F2 = ESCOQ F3 = ESCOR F4 = ESCOS Where ESC is equal to the ASCII character hex 1B. All other hot keys will not be available. When the num lock key is off the numerical key pad will be in the application mode. If you are connecting to a VT220 Host you can use these keys to send the VT220 PF key values. For example pressing the 1 on the numeric key pad will send the VT220 PF1 key. Pressing the 3 on the numeric key pad will send the VT220 PF3 key, and so on. With the num lock on the numbers will be sent. The plus key has been re-mapped to be a comma, again to be compatible with the VT100 keyboard. ═══ 3. File ═══ There is a collection of utilities in this section such as; Save_setup, Scripts, Capture, Print, Copy, and Paste. There is also an About box that has information on Multi-Net Communications, the company that wrote this software. ═══ 3.1. Save Setup ═══ Saves user definable configurations as well as screen size and position. ═══ 3.2. Capture ═══ Capture saves everything that is received from the modem to a file. For example, you can capture all new messages and then read them after you hang up. If you specify PRN as the filename everything will be captured to the printer. If you have Monitor_DCD selected then the capture file will be closed when you log off. This will happen if you started the capture file from the menu or from a internal script. ═══ 3.2.1. Start Capture ═══ You will be prompted for a file name and then everything that comes in from the modem will be saved to that file. If PRN is selected then everything will be sent to the printer. If the file exists you will be asked if you wish to overwrite the file. If you select no, the new information will be appended to the end of the file. Select cancel if you wish to abort the capture. You may also start the capture by clicking on the disk drive icon located on the Status_Line. ═══ 3.2.2. Cancel Capture ═══ This command will turn off capture. This command will only work if capture was started with the Start_Capture command. You may also cancel the capture command by clicking on the disk drive icon located on the Status_Line. ═══ 3.3. Scripts ═══ Scripts allow you to have the computer perform certain tasks automatically. The internal commands available are: wait_for puts sleep call capture_on capture_off shell The REXX commands that are available are: init_dll setcom sendb dcd char_avail read_timeout Get_ch ring_detect drop_dtr raise_dtr Wait_for Wait_fore Put_s Sleep beep get_cursor_position get_char_at capture_on capture_off xmodem_send xmodem_receive xmodem_chk_send xmodem_chk_receive xmodem_1k_send xmodem_1k_receive ymodem_send ymodem_receive ymodemg_send ymodemg_receive zmodem_send zmodem_receive kermit_send kermit_receive ascii_send ascii_receive cisb_send cisb_receive set_download_path os2_shell The 'C' library commands that are available are: init_lib setcom sendb dcd char_avail read_timeout get_ch ring_detect drop_dtr raise_dtr wait_for wait_fore put_s sleep beep get_cursor_position get_char_at capture_on capture_off xmodem_send xmodem_receive xmodem_chk_send xmodem_chk_receive xmodem_1k_send xmodem_1k_receive ymodem_send ymodem_receive ymodemg_send ymodemg_receive zmodem_send zmodem_receive kermit_send kermit_receive ascii_send ascii_receive cisb_send cisb_receive set_download_path os2_shell The scripts command is only available in the commercial version of Pmcomm. ═══ 3.3.1. Start Scripts ═══ With this command you can start a pre-written script at any time, just enter the file name of the script when prompted. If only the file name is entered, the script path will be searched for the file. Full path and file names are allowed. You may also start a script be clicking on the book icon located on the Status_Line. ═══ 3.3.2. Script Dialog ═══ The Script Dialog displays information and options about the current script. When the dialog is displayed you have the option of either aborting the script, closing the dialog box, or skipping the currently executing command. ═══ 3.3.3. Cancel Script ═══ This command is used to stop a script that is already running. The script will be canceled at the time this is selected unless the script is at a sleep command. In this case the script will stop after the sleep time interval has expired. You may also cancel a script by clicking on the book icon located on the Status_Line. ═══ 3.3.4. Start Script Generator ═══ This is the command that executes Pmcomm's script generator. The script generator will write a script in either REXX or Internal script syntax. If you want a script that will log you on to a BBS turn the script generator on and log on normally. Once finished logging on cancel the script generator. You now have a script that will log you onto that BBS. You may also start the script generator by clicking on the generator icon located on the Status_Line. ═══ Filename ═══ Pmcomm allows you to choose either a path and filename or just the filename. If only the filename is entered, Pmcomm will use the script directory that is setup under the Paths option. Be sure that all REXX scripts have an extension of .cmd and all Internal scripts have an extension of .scr. If these extensions are not used Pmcomm will create the script but the script will not be able to be executed. ═══ Description ═══ This description will appear as the first line of the script. The description will hopefully avoid any confusion about the purpose of the script a later date. ═══ REXX Script ═══ This will create a script using the REXX language. The filename must have an extension of .cmd in order for it to be executed by the REXX interpreter. A REXX script will execute a little slower than an Internal script, but it is more flexible. ═══ Internal Script ═══ This will create a script using Pmcomm's Internal script syntax. The filename must have an .scr extension in order for it to be executed by Pmcomm. ═══ Number of Characters in wait_fore ═══ The Number of Characters in wait_fore will decide the length of the wait_fore statements. The default is 10 characters which for most purposes will be adequate. ═══ 3.3.5. Cancel Script Generator ═══ This command turns of the script generator. You can also cancel the script generator by clicking on the generator icon located on the Status_Line. ═══ 3.4. Log File ═══ Logging writes to a file named pmcomm.log in the main pmcomm directory. The type of information written is the time, date and name of the number called. The time, date, cps and name of files transferred will also be saved. If you are setup to monitor DCD the time and date of when the call was terminated will also be recorded. ═══ 3.4.1. Start Logging ═══ The file named pmcomm.log in the main pmcomm directory will be opened. Any logging information will be appended to the end of the file. ═══ 3.4.2. Cancel Logging ═══ The log file will be closed and no other information will be written to the log file until it is re-opened using the Start Log option. You may also cancel logging by clicking on the log icon located on the Status_Line. ═══ 3.5. File Import ═══ This command copies a file from disk and sends it to a remotely connected computer. This can be handy for sending previously saved files as messages, or during a chat session. At times this is handier then using the clipboard. The delay time specified in the file import delay parameter under Options, Protocols, will pause the specified number of seconds after each line has been sent. This can be useful if the receiver can not process the information as fast as Pmcomm can send it. ═══ 3.6. Print ═══ Print allows you to send information that was previously received out to the printer. You can either send the information that is displayed on the visible part of the window, or you can print the whole scroll back buffer. The print function uses PRN as the device name for printing. ═══ 3.6.1. Print visible screen ═══ This command can also sent by pressing the Print Screen key. When Pmcomm receives this message it prints all of the lines on the visible part of the screen. ═══ 3.6.2. Print buffer ═══ When this is selected all of the scroll back buffer is sent out to the printer. There are about 240 lines available in the scroll back buffer, so this command may take awhile to complete. This does not mean that you can't do anything else. Pmcomm will print in the background while you go on. ═══ 3.6.3. Print selected ═══ This will print previously selected text (by using the mouse) to the PRN device. You may also print any selected text by clicking on the printer icon located on the Status_Line. ═══ 3.6.4. Print continuous ═══ This will print everything that comes in from the com port to the PRN device. Start continuous printing This will start continuous printing. Everything will be printed to the PRN device. It is not recommended that you use this command unless you have the OS/2 print spooler active. You may also start continuous printing by clicking on the printer icon located on the Status_Line. Cancel continuous printing This will cancel printing, that was started with the Start continuous printing command. You may also cancel continuous printing by clicking on the printer icon located on the Status_Line. ═══ 3.7. About ═══ The about box has information about this program, such as BBS support telephone number, company name, version number, serial number, and copyright information. ═══ 3.8. Exit ═══ Ends current session with Pmcomm. Pmcomm closes the comport when exiting which drops DTR. The hang-up string is also sent to the modem. ═══ 4. Edit ═══ In this section there are commands such as Copy, Paste, and Clear_Screen. ═══ 4.1. Copy ═══ Copy transfers information from the screen and places it into the Clipboard. Other applications, such as a word processor, can then use this information. ═══ 4.2. Paste ═══ Paste, copies information from the clipboard and sends it out to the modem. Care must be taken that the information sent can be handled by the remote computer. A use for this command would be that you could enter a message in a word processor, copy that message into the clipboard and then paste it into Pmcomm. ═══ 4.3. Clear Screen ═══ Clears the whole screen including the scroll back buffer and resets the attribute to the attribute defined in the setup area. ═══ 5. Connect ═══ This command allows you to connect to another computer, either through a modem, using the Dial command or direct connect, using the Send_Break command. ═══ 5.1. Dial ═══ Dial uses a dialing_directory to store phone numbers and other information about the computer. ═══ 5.1.1. Dial Dialog Help ═══ The dial dialog box allows you to add, select, modify, or delete entries in the current dialing directory. An entry can also be selected to be automatically selected (or optionally dialed) when Pmcomm is first started. To add an entry, select the add button in the dialog box. You will then be prompted to enter the name of the new entry. The directory will be sorted and the new entry will be selected. The cursor will be positioned at the number entry field so that the number for the new entry can be entered. After the number has been entered, pressing the enter key will save the dialing directory and dial the number(s). Pressing the tab key will allow you to edit the other fields. To select a number, using a mouse, "click" on the number (or numbers) that you wish to dial. To de-select an entry "click" on the number once again. If you are not using a mouse the arrow keys will move the highlight bar through the directory. To select your choices press the space bar, a second time will de-select the entry, then press enter. Multiple entries may be selected. This will form a dialing queue, in which Pmcomm will dial the selected entries until a connection is made. To modify an entry, select the entry to be edited and then use the tab key to move the cursor to the field you wish to change. Use the Change button to change the name of an entry. Pressing the save button will save the modifications to the disk. To change a name, select the entry to be edited and then use press the change button. The change will automatically be saved to the disk. To delete an entry, select the entry to be deleted and select the delete button in the dialog box. CAUTION: If multiple entries are selected, only the first selected entry will be deleted. The dial dialog box can also be accessed by clicking on the phone icon on the Status_Line. ═══ 5.1.2. Dial Prefix ═══ Pmcomm sends the selected dial prefix to the modem before sending the phone number. The default string for the prefixes is ATDT which tells the modem to dial using tone (ie. touch tone). If your phone system does not support touch tone then you could use the ATDP command. Pmcomm allows you to setup multiple prefixes, so that if you need to dial a special code for long distance calls you can set up a separate prefix for those calls. ═══ 5.1.3. Dial Suffix ═══ Pmcomm sends the selected dial suffix to the modem after sending the phone number. The default string for the suffixes is ^M which is a carriage return and line feed. ═══ 5.1.4. Automatically Selected ═══ If a dialing entry is marked as being automatically selected then each time Pmcomm is started this entry will be selected to be dialed. You can have as many entries automatically selected as you want, and this will form a dialing queue. A dialing queue allows you to try the first number and if it is busy it will then dial the next number in the queue. If the Dial Auto Selected Entries on program Startup is selected then any entries in the dialing directory that are marked as auto selected, will automatically be dialed. This option will allow you to automatically dial selected numbers when Pmcomm is first invoked. ═══ 5.1.5. Dial List Box ═══ The Dial List Box is a multiple selection list box. This means that you can select more then one entry at a time. The information on the right side of the Dialog Box is on the first item selected. The reason for using a multiple selection list box, is that you can select more than one item and these items will be dialed in order. For example, if the first number selected is busy then Pmcomm will dial the next number selected. If all selected numbers are busy, Pmcomm will start over again. If you have multiple items selected and select the Delete button, only the first item will be deleted. If an item is selected and you double click on that item then the selected items will be dialed. ═══ 5.1.6. Baud Rate ═══ In the Dialing Dialog Box you can enter any baud supported by the device driver you are using. Currently the maximum baud rate supported by the device driver included with OS/2 is 19200. Commonly used baud rates are: 300, 1200, 2400, 9600, and 19200. There are some device drivers currently available that support up to 38400. To enter a baud rate, type in a valid baud rate. The com port will be set to this value when the phone number is dialed. In the Port Options Dialog Box the above mentioned baud rates can be selected by using the radio buttons. ═══ 5.1.7. Parity ═══ The supported parities are: None, Even, Odd, Marked, and Space. To enter a parity, type in one of the above words. The two most widely used parities are None and Even. If you are calling most BBS's you would want to enter None, but most packet networks (such as CompuServe and Telenet) normally require Even parity. ═══ 5.1.8. Data Bits ═══ Currently supported data bits are 5, 6, 7, and 8. The most popular values are 7 and 8. For most BBS's 8 data bits are necessary, however, for systems such as CompuServe, 7 data bits are required. ═══ 5.1.9. Stop Bits ═══ Currently supported stop bits are 1 and 2. Most systems will require 1 stop bit. ═══ 5.1.10. Dial Script ═══ The script name can be up to 12 characters long. The script must be in the script path (see Paths for more information). Any REXX script, Internal script, or any OS/2 executable can be executed. Once Pmcomm is connected to the remote computer this script will be executed. ═══ 5.1.11. Dial Terminal ═══ The currently available terminal emulations are TTY, ANSI, and VT100. Pmcomm will switch to the terminal emulation listed once connected to the remote computer. ═══ 5.2. Send Break ═══ Initializes a connection with another computer through a protocol converter. ═══ 6. Transfer ═══ Transfer allows the use of different protocols to send and receive files from a remote computer. The protocol options are Xmodem_Checksum, Xmodem_CRC, 1K-Xmodem, Ymodem(batch), Ymodem-g(batch), Zmodem, Kermit, CISB, and ASCII. Zmodem is probably the best selection, when available on the remote computer. Ymodem-G should only be used with error correcting modems. IND$FILE is available for downloads using the VT100 terminal emulation only. CAUTION: IND$FILE currently does not have any error detection available in Pmcomm. ═══ 6.1. Download ═══ The download command brings up a dialog box for you to select the proper protocol. If the protocol selected is not a batch protocol ( ASCII, Xmodem_Checksum, Xmodem_CRC or 1K-Xmodem ) you will be prompted for a filename. If you have Auto-Zmodem or Auto_CISB selected in the protocol options area, Pmcomm will automatically start transferring as soon as the remote computer starts to send. Zmodem is not available in the demonstration version. ═══ 6.2. Upload ═══ When sending a file to a remote computer you must select the same protocol that the remote computer will use to receive the file. After selecting the proper protocol, a file open dialog box will have you select the file you wish to send. You can either double click on the file name or select the file and click on the OK button. If you have Auto_CISB selected in the protocol options area, Pmcomm will automatically start the transfer as soon as the remote computer sends the transfer request. With a CISB transfer the filename is specified on the host and the file open dialog box is not displayed. You may also use the drag and drop feature of Pmcomm. When files are dragged from the file manager and dropped onto Pmcomm, the transfer protocol that is listed for that phone number will be invoked and the file(s) will be sent to the remote computer. If you have Monitor_DCD selected then drag options will not be allowed until connected with another computer. To drag files from the file manager, select a file (or files) and then click on the selected file(s) with the RIGHT mouse button and hold the button down. Once you have begun to drag the files with the mouse the mouse pointer will change shape. If the mouse pointer is over a program that does not accept drag and drop the pointer will again change shape. When the mouse pointer is over any part of Pmcomm you can release the right mouse button. This will drop the files onto Pmcomm and Pmcomm will send them. This will even work if Pmcomm is an icon. To change the protocol for the current phone number, select upload from the menu and then select the protocol you want (make sure that the save to dialing directory is selected). After pressing the OK button the file open dialog box will be displayed. Just press cancel and you can now use the drag and drop with the new protocol. If a file is dropped onto Pmcomm while it is an icon in a group menu, this file will be used as a setup file, and Pmcomm will be invoked. ═══ 6.2.1. Xmodem Checksum ═══ Xmodem Checksum is one of the oldest protocols around and some people still use it exclusively. It is a moderately fast protocol that has fairly good error detection. ═══ 6.2.2. Xmodem CRC ═══ Xmodem CRC and Xmodem_Checksum are similar except CRC has better error detection then Checksum. Almost anywhere you call will offer at least one of these protocols. ═══ 6.2.3. 1k-Xmodem ═══ 1k-Xmodem uses the same error detection as Xmodem_CRC, but uses 1024 byte blocks instead of 128 byte blocks. This allows for greater throughput (higher characters per second) with roughly the same error detection. ═══ 6.2.4. Ymodem ═══ Ymodem uses the same error detection and block size as 1k-Xmodem but is a batch protocol. This means that in the first block the file size and name are sent. This keeps the receiver from having to type in the filename. It also allows you to send more then one file without have to start the transfer again. This protocol is second to Zmodem, in our opinion, when using non-error correcting modems. ═══ 6.2.5. Ymodem-g ═══ Ymodem-g is identical to Ymodem except it has no error correction. If an error is detected the transfer aborts. Because of this Ymodem-g should only be used with error correcting modems. Pmcomm will allow you to use this protocol anytime, but again care should be taken on what hardware it is used with. With the proper hardware Ymodem-g has the fastest cps (characters per second). ═══ 6.2.6. Zmodem ═══ Zmodem is almost as fast as Ymodem-g, however Zmodem does support error correction and file recovery. It only takes one aborted Ymodem-g transfer to lose all it's advantages. Zmodem has many advantages as far as the user is concerned. It is probably the easiest protocol to use. If using Pmcomm with the Auto-Zmodem download feature, the whole download is done automatically from the Pmcomm end. You have to select the file from the sender (BBS etc..) and once the sender starts sending, the transfer will begin on Pmcomm. It may take a moment before the sender sends the first sequence, so wait a moment. Some of the advanced features of Zmodem are listed below. Zmodem supports: 1. CRC-32 and CRC-16. The additional error detection of 32 bit CRC is supported. 2. File recovery. If a Zmodem download is aborted for any reason the transfer will resume at the point where it was aborted. You don't have to start the whole transfer over. 3. Auto-Download. When a Zmodem sending program starts up it first sends a rz and then a carriage return. Pmcomm will monitor for the startup sequence and automatically start the Zmodem download. Great care has been taken to make sure that it really is a Zmodem transfer and not someone typing it in at the keyboard (at either end). This feature makes downloading with Zmodem much faster and much easier. 4. Variable length headers. This reduces the amount of overhead that accrues with sending Zmodem headers. This is only used if supported by both the sender and receiver. 5. RLE encoding. Run length encoding is a form of file compression. Instead of sending 20 spaces it will send a space and the number 20. The receiver will then decompress it. Because of the multi-thread (tasking) capabilities of OS/2 this works much better then with DOS. This also is only used if supported by both the sender and receiver. 6. Variable length receive buffers. Some Zmodem receive programs have problems with writing to the disk and receiving from the comport at the same time. If necessary Zmodem will wait for an ACK from the receiver after the specified buffer size has been sent. This will only be done if it is requested by the receiver requests it. 7. Retains original file size. Some people say that because Zmodem headers are larger that there is two much overhead. This really isn't the case. For example if comparing Zmodem to Ymodem-g (full flow Ymodem), Ymodem-g has less overhead with each packet. However Ymodem-g rounds the file size up to an even 128 byte size. In some cases it is even rounded up 1024 bytes. This is done because Ymodem (g or otherwise) only supports two block sizes, 128 and 1024 (the block size is actually 133 and 1029 to allow for the block header, STX or SOH, and the CRC value), so it has to send full blocks. However, Zmodem uses variable block sizes. The block sizes adjust from 32 bytes to 1024 bytes. If telephone line quality is poor smaller blocks are sent so that if an error does occur less data will have to be resent. As the line quality improves the size of the blocks will be increased. The starting block size is variable depending on the connected baud rate. 8. Error recovery. Because Zmodem can resend from any place in the file, aborted transfers are rare. By reading this you can tell our favorite protocol is Zmodem. Once you have used Zmodem it's hard to get used to using other protocols. ═══ 6.2.7. ASCII ═══ The ASCII protocol can be used to transfer text files. There is no error detection or correction available with this protocol. It is recommended that one of the other protocols be used, even with text files. ═══ 6.2.8. CISB ═══ The CIS B protocol can be used to transfer files to and from CompuServe. CompuServe B, B+ and Quick B are supported. Quick B is the fastest variant of the B protocol and is automatically selected when it is supported on the host computer. The CIS B protocol is an automatic protocol where the host initiates the transfer and Pmcomm will automatically go into the send or receive mode. If you are sending a file, the file must exist in the download directory of Pmcomm. If Pmcomm is unable to find the file then the transfer will abort. Pmcomm can be configured to ignore the CIS B protocol by de-selecting the Automatic CIS B option in the Protocol Option Dialog. Pmcomm may run slightly faster in terminal mode without this selection. Under most systems the difference will not be detectable. Another option for CIS B is for file recovery. What this option will do is if you started a download and aborted the transfer you can then re-start the transfer and CIS B will resume from the place where it was aborted. This can be very handy in poor phone line conditions. The packet size for CIS B is adjusted by the connecting baud rate. For example, if you are connected to CompuServe at 2400 baud the packet size will be 1024 bytes. If you connect at 1200 baud the packet size will be 512 bytes. This allows for speedy error recovery in case a error occurs because of phone line noise. Downloads will automatically be placed in the Pmcomm download directory and the download directory will automatically searched for any uploaded files. If you specify a path with the filename when CompuServe asks for a filename for your computer, then this path will be used. CIS B should be the protocol used when transferring files to and from CompuServe. ═══ 6.2.9. Kermit ═══ Kermit is the slowest protocol offered here and should only be used when no other protocol is available. Kermit does have advantages and it is offered on many mini-computers as well as mainframes. Kermit will also transfer binary files when connected at 7,E,1. The maximum packet size that is allowed is 94 bytes which is one of the reasons that makes Kermit slow. There is a variation of Kermit that allows larger packet size, but it is not implemented in Pmcomm. Kermit allows batch transfers, both in sending and receiving, and will attempt to preserve the file names. If Pmcomm gets an error when trying to create the file name received from the sender it will convert it to a "8.3" type of file name. Kermit allows variable packet sizes so the original file size is maintained. Pmcomm allows you to change the "End of Line" character (also called end of packet), the "Quoting character" (sent before control codes), the "pad character", and the number of pad characters you want. You can also tell Pmcomm to force an 8 bit transfer even if it is on at 7,E,1. This comes in handy if you are downloading files from Compu-Serve. If this option is not selected and you are on at 7 data bits, Pmcomm will use what is called the 7 bit quoting. The 7 bit quote character that Pmcomm uses is a &. ═══ 6.2.10. IND$FILE ═══ IND$FILE currently is only supported under VT100 terminal emulation through a 3708 protocol converter. Because of problems with character conversion through the protocol converter error detection is not currently available. Because of this, files received using IND$FILE maybe CORRUPTED! Use this protocol at your own risk! IND$FILE is not a very efficient protocol because every byte that is transferred must be checked to see if it will pass through a 7 bit data stream and escaped if it will not. This can greatly reduce the amount of data that can be sent in each packet. ═══ PC File Name ═══ This is the file name which will be used on the receiver. If a full path and file name are used the file will reside at that address. If just a file name is specified the file will be stored in the upload directory set in the Paths menu option. This file name must be specified or the transfer will not work. ═══ Host File Name ═══ This is the file name as it resides on the Host. If this filename is not specified, Pmcomm will default to the PC File Name as the Host File Name. ═══ Binary ═══ This option will tell the Host to send the file as a Binary file. ═══ Ascii ═══ This option will tell the Host to send the file as an Ascii file. ═══ CRLF ═══ This option will tell the Host to send a "carriage return line feed" after each record. This option will be needed on most Ascii file transfers while rarely needed with a Binary file transfer. ═══ 6.2.11. Save to Dial Directory ═══ When this option is selected the file transfer protocol that is selected will be saved into the dialing directory for this number. The next time a file transfer is used when connected to this number this same protocol will be selected and all the user will have to do is press the OK button. If you do not want this protocol save then de-select this option. ═══ 7. Hangup ═══ Hang-up sends the hang-up command string (see the Option menu) and optionally drops the DTR line to the modem. Dropping DTR is the most effective if your modem is setup to hang-up when DTR is dropped. Using a hang-up string is also slower because Pmcomm has to get the modem into the command state before sending the hang-up string. If you have DTR on and delete the hang-up string the hang-up will be much faster. The default string is : +++~~~~ATH^M. The +++ is the default modem attention string, which puts the modem into the command state. The ~~~~ will make Pmcomm pause 2 seconds (.5 seconds per ~) and then the ATH will force the modem to go on-hook (hangup). The ^M sends a carriage return line feed combination. ═══ 8. Options ═══ Option allows you to tailor Pmcomm to your own tastes. The areas in option are: Port, Dial_Setup, Modem, Protocols, Paths, Macros_Setup, Screen, Terminal, and Chat. The setup is not automatically saved. This allows you to change things temporally without changing your default setup file. If you do want to make the changes permanent be sure to save the setup file. To save the current setup file, use the Save_setup command under the File menu option. ═══ 8.1. Port ═══ The device name should be a valid com device name. Some third party device drivers allow you to use names other then COM1, COM2, etc., so Pmcomm does not limit you to these names. Hardware flow control and DTR should be on for most modems. There are currently a couple third party device drivers as well as OS/2 2.0, that support 38400 baud, so Pmcomm has been made to support this baud rate. ═══ 8.1.1. Device Open Error Retries ═══ This is the number of attempts Pmcomm will try to open a device. After the specified number of attempts Pmcomm will exit. If 0 is entered, Pmcomm will not retry to open the device. This option is generally used to access a shared com port (i.e. modem pool). ═══ 8.1.2. Seconds Between Retries ═══ This is the number of seconds Pmcomm will wait before retrying to open a device. ═══ 8.1.3. Device Name ═══ The device name should be a valid com device name. Some third party device drivers allow you to use, and in some cases require that you use, names other then COM1, COM2, etc., so Pmcomm does not limit you to these names. If you are using Pmcomm across a LAN then normally there will be an Alias name for the com port you are using on the server. See your LAN administrator for the Alias name(s) that you should use to access the modem(s). ═══ 8.1.4. Hardware Flow Control ═══ Hardware Flow Control is generally the most reliable method of flow control. There are two basic times when flow control is needed. First, if Pmcomm is sending information to the modem faster than the modem is able to send the information flow control is needed. If flow control is not enabled then a transmission error will occur. Second if the modem is sending information to Pmcomm faster then Pmcomm can receive it, then Pmcomm will try to tell the modem to stop sending the information. This can occur when an excessive amount of processing is being preformed on the computer. Hardware Flow Control uses two modem signals to control the flow of information. For send flow control the CTS modem line is used. For receive flow control the RTS modem line is used. If your modem supports these flow control signals, then setup your modem and Pmcomm for Hardware Flow Control. ═══ 8.1.5. XON/XOFF Flow Control ═══ Xon/Xoff Flow Control should only be used when Hardware_Flow_Control is not available and when flow control is necessary. The only two file transfers that will work correctly with Xon/Xoff are ASCII and Zmodem. The only other protocol that should need flow control is Ymodem-g. ═══ 8.1.6. Use DTR ═══ DTR stands for Data Terminal Ready, which by lowering DTR you can signal the device you are communicating with (usually a modem) that you wish to go off line. If you are connected to a modem you should set the modem up to go on-hook when the modem detects a drop in DTR. The command for a Hayes 2400 baud modem is AT&D2. If this option is selected in Pmcomm, then DTR will be dropped when the hangup command is selected, or after each re-dial attempt. ═══ 8.1.7. Monitor DCD ═══ DCD stands for Data Carrier Detect and is pin 8 on an RS-232C cable. When a carrier is detected by the modem, Pmcomm assumes that you are connected to a remote computer. If DCD is not supported by your modem or other hardware, then this option should be turned off. With this option turned on, if no DCD is present then Pmcomm will not Hangup, or go into a file transfer. The drag and drop from the file manager will also be disabled. The command for a Hayes 2400 baud modem is AT&C1. This will have the modem track the state of DCD. ═══ 8.1.8. Default Baud ═══ The default baud is the baud rate that the com port is set to when Pmcomm is first executed. The baud rate is changed to the value in the dialing directory when a number is dialed. Normally the default baud should be set to the highest baud rate supported by your modem. If you have Pmcomm connected directly to another computer with a NULL modem cable, then you want to set this baud to the same baud rate that the other computer is using. ═══ 8.1.9. 8/N/1 ═══ This selection means 8 data bits, No parity, 1 stop bit. This option will be overridden with the parameters listed in the dialing directory once you have connected with a remote computer. ═══ 8.1.10. 7/E/1 ═══ This selection means 7 data bits, Even parity, 1 stop bit. This option will be overridden with the parameters listed in the dialing directory once you have connected with a remote computer. ═══ 8.2. Dial Setup ═══ This allows you to select a dialing_directory from a list box and also lets you setup the prefix and suffix of the number to be dialed. There is a list box that will allow you to select how the dialing directory will be sorted. You can sort the dialing directory by name, number, baud rate, last on, number of times called, download cps, upload cps, dial prefix, and dial suffix. You can also select either ascending or descending order. ═══ 8.2.1. Dial Auto Selected Entries ═══ If the Dial Auto Selected Entries on program Startup is selected then any entries in the dialing directory that are marked as automatically_selected , will automatically be dialed. This option will allow you to automatically dial selected numbers when Pmcomm is first invoked. This can be very useful if you dial the same numbers each time you run Pmcomm. ═══ 8.2.2. Sort Dialing Directory ═══ The dialing_directory can be sorted by either the name, phone number, baud rate, last time called, number of times called, download characters per second, upload characters per second, dial prefix, or dial suffix. The directory can be sorted in either ascending or descending order. For example you can sort the dialing directory by last time called in descending order, and all the most recently called numbers will be displayed at the top of the dialing directory. ═══ 8.2.3. Dialing Directory List ═══ A list of the available dialing_directories are displayed in a list box, so that a default directory can be selected. The selected directory will automatically be loaded when Pmcomm is started. You can add additional directories by pressing the add button. ═══ 8.3. Modem ═══ The initialization string should have the commands in it to enable word result codes, hang-up when DTR is dropped and enable hardware flow control. Not all of these are supported by all modems but use them when possible. Pause before redial is the time Pmcomm waits before trying to re-dial a number. Seconds to wait for carrier is how long Pmcomm will wait for a connection before re-dialing. ═══ 8.3.1. Modem Initialization String ═══ Initialization string should have the commands in it to enable word result codes, hang-up when DTR is dropped and enable hardware flow control. Not all of these are supported by all modems, but use them when possible. Pmcomm's default modem string is for a Hayes 2400 baud modem. This is the default string: AT&F&D2&C1M0Q0S2=255S10=30X4 For a Courier HST the following string should be entered. AT&FM0&B1&H1&K0&R2&S1&Y0S2=43S10=30X4 This allows everything to be transferred to the modem at 19200 no matter what the connect baud is. This setting will give you the max through-put even at lower baud rates. To write this into memory of the HST run Pmcomm and then enter AT&F&W. This will set the NRAM to the factory defaults. Then type in the setup string and press enter. To save this to the NRAM enter AT&W. Then all you have to have for a initialization string in Pmcomm is an ATZ, which will restore these settings from the NRAM. On the HST I have the DIP switches set as follows: up: 1,2,4,6,7,9,10 down: 3,5,8 For a Hayes 9600 V.42 modem the following string should be entered. AT&F&K3W1&C1&D2S36=7S0=0S2=255S7=30M0S10=30X4N1 ═══ 8.3.2. Modem Pause Before Redial ═══ Pmcomm will pause for the specified number of seconds before attempting to re-dial a phone number. Some phone systems take a few seconds before you can re-dial a phone number. The default value is 3 seconds and should work for most phone systems. ═══ 8.3.3. Modem Dial Timeout ═══ Pmcomm will wait for a Connect or Carrier message from the modem for up to 64 seconds. The S7 register of the modem must also be set to a value at least as great as the dial timeout value. This can be done by issuing the following command to the modem: ATS7=30. This would set the modem to timeout after 30 seconds. Setting the dial timeout to a value greater then 30 would not be effective because the modem would still timeout after 30 seconds. The default timeout value for Pmcomm is 60 seconds. ═══ 8.4. Protocols ═══ The options under protocols are: Auto Zmodem Download. Zmodem file recovery. Zmodem CRC-32. Zmodem CRC-16. Auto CISB Transfer. CISB file recovery. Import File line delay. Force 8 bit transfer. End of line character. Control quote character. Number of pad characters. Pad character. IND$FILE. Auto Zmodem makes Pmcomm check for a Zmodem start sequence. When received, Pmcomm automatically starts receiving the file. Zmodem file recovery allows Zmodem to resume a file transfer that was previously aborted. CRC-32 has improved error correction but is slightly slower. If CRC-32 is not available Pmcomm will switch to CRC-16. Zmodem is only available on commercial versions. Auto CISB is similar to Auto Zmodem except that both uploads and downloads can be started this way. This feature is for the CISB file transfer protocol. CISB file recovery allows CISB to resume a file transfer that was previously aborted. The IND$FILE protocol may also be selected for downloads. CAUTION: The IND$FILE file transfer protocol in Pmcomm, currently, does not support any error detection. The rest are Kermit options and should be made to match your host. ═══ 8.5. Paths ═══ The download path allows you to have the files that you download put into a different directory. The script path is where Pmcomm looks for the scripts listed in the dialing directory. If a script called startup.scr exists in this directory then it will be executed each time Pmcomm is started. The capture path is where all screen captures are stored. These paths must contain a valid directory. It defaults to the directory that Pmcomm was started from. There is also a call logging option here which when turned on will start call logging as soon as Pmcomm is run. ═══ 8.6. Macros Setup ═══ There are 10 user definable keyboard macros. These can be invoked by holding down the Alt key and pressing 0-9. Use ^M to send a carriage return. When the macro is invoked it will send the string that you have defined to the modem. Once you have setup the macro string, it can also be selected from the main menu using a mouse. Other special characters are: ^H = tab character. ^J = carriage return without a line feed. ^L = form feed. ^[ = escape character (Ascii 27) ^C = send the Ctrl-C character (Ascii 3) ^K = XON character ^S = XOFF character ~ = sleep for half a second You can also send any other special character by holding down the Alt key and typing in the Ascii number on the numeric key pad. For example, if you want to enter the escape character into a macro you could hold down the Alt key and then press the two and the seven on the numeric key pad (while still holding down the Alt key). When you then release the Alt key the escape character would be inserted into the macro. Scripts can be executed from macros by using the shell command. An example of this would be: shell("c:\pmcomm\plane.cmd"); This would execute the REXX script called plane.cmd. This allows you a quick and easy way to execute often used scripts. ═══ 8.7. Screen ═══ This command allows you to tailor the screen handling to your tastes. The best thing to do is try them to see if you like them. Some features like the automatic horizontal scroll will probably only be used when typing messages and chatting. ═══ 8.7.1. Font ═══ Allows you to select from a list of font sizes. The sizes depend on the display adapter and version of OS/2 your are using. Pmcomm queries the video device driver to see what font sizes it supports and lists them for you to select. ═══ 8.7.2. Foreground ═══ Sets up the color to be used for the text used in the Pmcomm window. There are 16 different background and foreground colors available, allowing for 256 different color combinations. ═══ 8.7.3. Background ═══ Sets up the color to be used for the Pmcomm window background. There are 16 different background and foreground colors available, allowing for 256 different color combinations. ═══ 8.7.4. Hide Window While Dialing ═══ The hide window while dialing option will make the screen less "busy" while dialing. ═══ 8.7.5. Hide Window During a File Transfer ═══ The hide window during a file transfer option will make the screen less "busy" while executing a file transfer. ═══ 8.7.6. Automatic Vertical Scroll ═══ The Automatic vertical scroll option will make Pmcomm keep the cursor vertically in the Pmcomm window. ═══ 8.7.7. Automatic Horizontal Scroll ═══ The Automatic horizontal scroll option will keep the cursor horizontally in the Pmcomm window. ═══ 8.7.8. Retain Dialing Dialog's Position ═══ The retain dialing dialog's position option will make Pmcomm restore the last position of the dialing dialog each time it is invoked. If this option is not selected then OS/2 will decide where to place the dialog boxes. ═══ 8.7.9. Retain Transfer Dialog's Position ═══ The retain transfer dialog's position option will make Pmcomm restore the last position of the transfer dialog each time it is invoked. If this option is not selected then OS/2 will decide where to place the dialog boxes. ═══ 8.7.10. Show Dial Message Box ═══ The Show Dial Message Box option makes Pmcomm display a message box and beeps at the user, when Pmcomm obtains a remote connection, until the OK button is pressed. This will make sure you notice that Pmcomm has a remote connection. ═══ 8.7.11. Local Echo On ═══ The local echo on option will make Pmcomm echo all keystrokes to the local screen as well as to the remote computer. ═══ 8.7.12. Turn Sound On ═══ The turn sound on option will make Pmcomm alert the user when certain functions have been completed. The sound must also be turned on in OS/2 for this option to work. This can be done through the control panel. ═══ 8.8. Status Line ═══ This option will activate Pmcomm's Status Line. The Status Line allows you, at a glance, to view which options are currently running. Phone Icon There are many options that can be accessed by the Phone Icon. If the telephone is on-hook (hung up) and you click on the icon, Pmcomm will dial any numbers that you have selected in the dialing directory. If there aren't any numbers selected, Pmcomm will "pop" up the dialing directory. If you select a dialing directory in File Manager and hold down the right mouse button you can drag the dialing directory to the phone icon. Once the button is released over the phone icon, Pmcomm will dial any selected numbers. If there aren't any numbers selected, Pmcomm will "pop" up the dialing directory. Once online the phone icon will be taken off-hook. If the phone is off-hook and you click on the icon Pmcomm will hang-up. If Monitor DCD is turned off and you click on the icon, Pmcomm will dial any selected numbers in the dialing directory. If there aren't any numbers selected, Pmcomm will "pop" up the dialing directory. If Monitor DCD is turned off the telephone will appear with a question mark imposed over the top of it. Disk Drive Icon The Disk Drive Icon allows a quick and easy way to turn the Capture option on and off. If the disk drive icon light is green and you click on the icon Pmcomm will will then prompt you for the filename of the capture file. If the disk drive icon light is red Pmcomm is already executing the Capture command. If you click on the icon while the disk drive icon light is red, Pmcomm will cancel the Capture command. Log Icon By clicking on the log icon, Pmcomm will turn logging on. When logging is on, the log will appear with logging equipment (cross-cut saw and an axe), if you click on this icon Pmcomm will turning logging off. Printer Icon By clicking on the Printer Icon you can print any selected text. If there isn't any selected text, Pmcomm will execute the Print Continuous command. Clicking on the icon again will turn the Print Continuous command off. Generator Icon Clicking on the Generator Icon will turn on the Script Generator. Pmcomm will then prompt you for a filename for the script. If you click on the icon again, Pmcomm will turn off the Script Generator. The Generator Icon will have lightning bolts about it when a script is being generated. Book Icon Clicking on the the Book Icon will execute a script. If Pmcomm is executing a script, clicking on the icon will cancel the script. You can also use the drag and drop feature of Pmcomm to select any executable file (extensions .exe, .cmd and .scr) from the File Manager and executing that file by dragging and dropping the file on the Book Icon. Com Port Statistics This line in the Status Line shows which com port you are using, the baud rate, data bits, parity, and stop bits that Pmcomm is currently using. Clicking on this line with a mouse will "pop" up the port setup dialog box. Elapsed Timer The Status Line also has an elapsed timer that starts as soon as you are connected to another computer. The timer displays the elapsed time in hours and minutes. You may also set two warning levels. The first will change the connect time to yellow and the second level will turn the connect time red. These warning levels are useful to keep track of how of the time you are connected to a remote computer. The elapsed timer will only be displayed if Monitor DCD is turned on. If Monitor DCD is turned off the time of day will be displayed. Clicking on this line will toggle between the time of day and the connect time. The of day will be displayed as default. ═══ 8.8.1. Show Status Line ═══ The "Show status line" option will display Pmcomm's Status Line at the bottom of the Pmcomm window. For more information see Status_Line. ═══ 8.8.2. Connect time for first warning ═══ After the amount of time specified in this option expires, Pmcomm will turn the connect time yellow. The time must be specified in the hh:mm format. ═══ 8.8.3. Connect time for second warning ═══ After the amount of time specified in this option expires, Pmcomm will turn the connect time red. The time must be specified in the hh:mm format. ═══ 8.9. Terminal ═══ Terminal allows you to select which emulation you wish to use. There are also some options for the different emulations. ═══ 8.9.1. TTY emulation ═══ The TTY emulation makes Pmcomm act as a teletype device. Generally this is the least used emulation, however, it is also the fastest. The reason for this is that there are very few special commands that Pmcomm has to process. None of the special ANSI control codes are processed. ═══ 8.9.2. ANSI emulation ═══ The ANSI emulation is probably the most used. It will execute the special ANSI screen control commands. This allows the remote program to be able to clear the screen, position the cursor and change the colors. There are other screen control commands but these are the most commonly used ones. There are also options to have Pmcomm ignore the ANSI color changes so that you can use the colors you want, instead of the ones the remote computer uses, and to send the ANSI cursor position commands with the arrow keys. When using the ANSI emulation you can also have Pmcomm strip off the ANSI commands before saving the information into a capture file. This will make the capture file much more readable. You can also change the length of the page, to correspond to the size of your screen. The default for the ANSI page length is 25 lines, and under most cases should be left there. ═══ 8.9.3. VT100 emulation ═══ In VT100 emulation, some keys have been changed to try to more closely emulate the VT100 keyboard. F1-F4 are now the PF keys. Because of this the F1 key will not display the normal help and F3 will not exit the program. The PF keys will send the following characters: F1 = ESCOP F2 = ESCOQ F3 = ESCOR F4 = ESCOS Where ESC is equal to the ASCII character hex 1B. All other hot keys will not be available. When the num lock key is off, the numerical key pad will be in the application mode. If you are connecting to a VT220 Host you can use these keys to send the VT220 PF key values. For example pressing the 1 on the numeric key pad will send the VT220 PF1 key. Pressing the 3 on the numeric key pad will send the VT220 PF3 key, and so on. With the num lock on the numbers will be sent. The plus key has been re-mapped to be a comma, again to be compatible with the VT100 keyboard. In most cases it is best to tell the host that you are a VT220 terminal. The VT100 emulation of Pmcomm supports most of the VT220 commands, and will allow you to use the extra support that VT220 allows. If you tell the host that you are a VT220 terminal, for example, you will be able to use the Ctrl-R for reset and the Ctrl-C for clear. These are just a couple of examples of the additional benefit that you can get from VT220. The send DEL for backspace option is the default for many VT100 keyboards. When this is selected, Pmcomm will send a hex 7f character instead of the backspace character. You can still send a backspace character by pressing Ctrl-Backspace. This allows you to have both these characters available at one time. The translate CR/LF for LF option will act as if it received a carriage return and a line feed, each time it receives a line feed. The line wrap option will make Pmcomm wrap the line if the line is longer than the page width. If this option is off the line will be truncated. The Insert mode option will allow you to insert characters into the middle of a line and the rest of the line will be shifted to the right to allow room for the new characters. The cursor visible option determines if the cursor will be shown on the screen or not. The Screen origin relative option determines if Pmcomm will keep everything on a 25 line screen or allow it to use the scroll back buffer. In most cases this option should be selected. The last two options are to set the width of the screen. Either 80 or 132 columns are supported. Most of these options can be changed from the host. The default setup should work for most applications, and the host can change the options to meet different needs. ═══ 8.10. Chat ═══ This sets up Pmcomm to "chat" when connected to another computer that is also running Pmcomm. This mode automatically sets Pmcomm to echo characters locally and to send a carriage return line feed combination when the enter key is pressed. ═══ 9. Macros ═══ Allows you to pick, with a mouse, the macro you wish to send. Can also be selected with an Alt+corresponding number keystroke. Pmcomm allows you to set up ten different macros. Scripts can be executed from macros by using the shell command. An example of this would be: shell("c:\pmcomm\plane.cmd"); This would execute the REXX script called plane.cmd. This allows you a quick and easy way to execute your most popular scripts. ═══ 10. Script Syntax ═══ Both, internal and REXX, syntaxes are described in this section. ═══ 10.1. REXX Functions ═══ This describes the function calls that are available in the rxpmcomm.dll. Before using any of these calls you must include these lines in your REXX program: Call RxFuncadd " init_dll ","RxPmcomm","init_dll" Parse arg port portname screen_handle dde_output dde_input semaphore Call init_dll The rxpmcomm.dll must reside in a directory listed in your LIBPATH statement in config.sys. One of the default directories is \os2\dll. These functions are designed to make it easier to preform tasks necessary when writing scripts for asynch communications. To invoke a REXX program from a script, use the shell( ) function in the script. The format of the shell function is as follows: shell("\path\filename.cmd"); where filename.cmd is your REXX program. These functions have been tested with the REXX that comes with OS/2 1.2 EE, but should work with any totally function compatible REXX. There are some sample REXX programs included. ═══ 10.1.1. init_dll ═══ The init_dll function will register the functions in the rxpmcomm.dll, with REXX. This function must be called before any other rxpmcomm.dll function is called. The RxFuncadd must be called before init_dll to register this function with REXX. ═══ 10.1.2. os2_shell ═══ os2_shell port,port Example Call os2_shell port,port Description This command will allow a caller to shell to OS/2, remotely. The first parameter is the input handle and the second is the output handle. In the example above, the command will receive and send the information to the com port. Returns 1 if successful and 0 if unsuccessful. ═══ 10.1.3. set_download_path ═══ set_download_path directory,dde_output Example Call set_download_path "c:\pmcomm",dde_output Description The above example will set the download path to c:\pmcomm. This will store all of the files received in that directory. The dde_output, is the dde_output value passed on the command line. Returns 1 if successful and 0 if unsuccessful. ═══ 10.1.4. setcom ═══ setcom baud,parity,data_bit,stop_bits,port Example Call setcom "2400","N","8","1",port Description This would set the com port to 2400 baud, no parity, 8 data bits, 1 stop bit. Baud can be from 300 to 19200 with the standard OS/2 device driver. Parity can be N(none), O(odd), E(even), M(marked), or S(spaced). Data bits can be 5, 6, 7 or 8. Stop bits can be 1 or 2 (2 can only be used with 5 data bits). If a parameter is an empty string (i.e. setcom "","E","7","1",port) this leaves the baud at the current rate but set the line characteristics to 7, Even, 1. Returns 1 if successful and 0 if unsuccessful. ═══ 10.1.5. sendb ═══ sendb length,port Example Call sendb "300",port Description This call sends a break signal a certain time in milliseconds. The above example would send a break signal for 300 milliseconds. This call is mostly used to establish direct connects (not using a modem). Three hundred milliseconds should be okay for most situations. Returns 1 if successful and 0 if unsuccessful. ═══ 10.1.6. dcd ═══ dcd port Example Call dcd port Description This call checks to see if there is a carrier detected on the modem. You can use this to see if Pmcomm is still online to a remote computer. For this information to be correct the modem must support dcd and the modem must be configured to support dcd. To find the command refer to your owner's manual. Returns 1 if carrier detected and 0 if no carrier. ═══ 10.1.7. char_avail ═══ char_avail port Example Call char_avail port Description This call checks to see how many characters are available in the device driver's receive buffer. You can use this function to check to see if the device driver has received any characters from the com port. Returns Number of characters in device driver receive queue. ═══ 10.1.8. read_timeout ═══ read_timeout timeout,port Example Call read_timeout 20000,port Description This call sets the length of time (in milliseconds) that wait_for, wait_fore, Get_ch will wait for a character from the com port. The above example will make the functions wait for 20 seconds. Returns 1 if successful and 0 if unsuccessful. ═══ 10.1.9. Get_ch ═══ Get_ch port Example Call Get_ch port Description This call will get a character from the com port. If no character is available by the time set with read_timeout the function will return with a value of -1. Otherwise the function will return with the character read. Returns char value if successful and -1 if unsuccessful. ═══ 10.1.10. ring_detect ═══ ring_detect port Example Call ring_detect port Description This call can be used to inform a program if the phone is ringing. Returns 1 if ring detected, 0 if no ring, and 2 if invalid number of parameters. ═══ 10.1.11. drop_dtr ═══ drop_dtr port Example Call drop_dtr port Description This call is usually used to make a modem hang up. The modem must be configured to allow this. To find the command for your modem, check your owner's manual. Dtr needs to be dropped for about 2-3 seconds to make sure the modem sees the drop in DTR. After that length of time raise_dtr can be called to bring DTR back up. On a Hayes 2400 the above command will also keep the modem from doing an auto answer until you raise_dtr again. Returns 1 if successful and 0 if unsuccessful. ═══ 10.1.12. raise_dtr ═══ raise_dtr port Example Call raise_dtr port Description This call is usually used after drop_dtr to allow the modem to process commands and enable it to answer the phone. Returns 1 if successful and 0 if unsuccessful. ═══ 10.1.13. Wait_for (REXX) ═══ Wait_for string,string,string...,port Example Call Wait_for "first name?","last name?",port Description The above example would wait for either first name?, or last name?, from the com port. The function will return the index of the string that matched. For example if the Wait_for received last name?, then the result would be 2. You can specify any number of strings depending on memory available. Returns Index of matched string or zero if timeout or error. ═══ 10.1.14. Wait_fore ═══ Wait_fore string,string,string...,port,screen_handle Example Call Wait_fore "first name?","last name?",port,screen_handle Call Wait_fore "first name?",port,1 Call Wait_fore "first name?","raw",port,1 Description The first example would wait for either first name?, or last name?, from the com port and echo the out_put to the Pmcomm screen. The second example would do the same except it would write the out put to StdOut(value 1) which would be the REXX screen. The third example would look for an exact match coming accross the com port, including any ANSI sequences. Returns Index of matched string or zero if timeout or error. ═══ 10.1.15. Put_s ═══ Put_s string,port Example Call Put_s "first name",port Description This call will send string out to port. In the above example first name will be sent to the com port. If port is not specified then 'string' will be sent to the REXX screen. If screen_handle is specified instead of port then the string will be sent to the Pmcomm screen. Returns Length of string actually written. ═══ 10.1.16. Sleep (REXX) ═══ Sleep time Example Call Sleep "1000" Description This call will delay the program for the amount of milliseconds specified. The above example will delay the computer for one second. Returns Unconditionally 0. ═══ 10.1.17. beep ═══ beep frequency,duration Example Call beep 495,100 Description The above example will beep the speaker. Returns 1 if successful and 0 if unsuccessful. ═══ 10.1.18. get_cursor_position ═══ get_cursor_position axis,dde_output,dde_input Example Call get_cursor_position "column",dde_output,dde_input Description The above will return the column that the cursor is in. To get the current row, you would issue this call with "row" instead of "column". The row value that is returned is relative to the top of the scroll back buffer. The top row of the scroll back buffer and the first column would be 0,0. Returns Cursor position. ═══ 10.1.19. get_char_at ═══ get_char_at row,column,number,dde_output,dde_input Example Call get_char_at 0,0,80,dde_output,dde_input Description The above will return the characters at the first line of the scroll back buffer. It will return 80 characters, even if the characters are spaces. The maximum number of characters that can be returned at one time is 200. Returns Character(s) at the specified row and column. ═══ 10.1.20. REXX capture_on ═══ capture_on filename,dde_output,dde_input Example Call capture_on "c:\pmcomm\cap.txt", dde_output, dde_input Description The above will turn capture on so that everything will be saved into a file. If you have strip ANSI configured in Pmcomm then the text only will be saved in ANSI, and VT100 terminal emulation. If the file already exists it will be overwritten. Returns 1 if successful and 0 if not. ═══ 10.1.21. REXX capture_off ═══ capture_off dde_output,dde_input Example Call capture_off dde_output,dde_input Description The above will turn capture off. The capture may have been started from a script or from the menu. Returns 1 if successful and 0 if not. ═══ 10.1.22. xmodem_send ═══ xmodem_send filename,dde_output,dde_input Example Call xmodem_send "filename.ext",dde_output,dde_input Description This call will invoke the Xmodem_CRC send routine, built into Pmcomm. Once issued the call will not return until the transfer either finishes or is aborted. Pmcomm will show the normal transfer dialog that it does when uploading from the menu. Returns 1 if call is successful and 0 if unsuccessful. ═══ 10.1.23. xmodem_receive ═══ xmodem_receive filename,dde_output,dde_input Example Call xmodem_receive "filename.ext",dde_output,dde_input Description This call will invoke the Xmodem_CRC receive routine, built into Pmcomm. Once issued the call will not return until the transfer either finishes or is aborted. Pmcomm will show the normal transfer dialog that it does when downloading from the menu. The file will be downloaded into the download directory. The file name specified must not include a path. Returns 1 if call is successful and 0 if unsuccessful. ═══ 10.1.24. xmodem_chk_send ═══ xmodem_chk_send filename,dde_output,dde_input Example Call xmodem_chk_send "filename.ext",dde_output,dde_input Description This call will invoke the Xmodem_Checksum send routine, built into Pmcomm. Once issued the call will not return until the transfer either finishes or is aborted. Pmcomm will show the normal transfer dialog that it does when uploading from the menu. Returns 1 if call is successful and 0 if unsuccessful. ═══ 10.1.25. xmodem_chk_receive ═══ xmodem_chk_receive filename,dde_output,dde_input Example Call xmodem_receive "filename.ext",dde_output,dde_input Description This call will invoke the Xmodem_Checksum receive routine, built into Pmcomm. Once issued the call will not return until the transfer either finishes or is aborted. Pmcomm will show the normal transfer dialog that it does when downloading from the menu. The file will be downloaded into the download directory. The file name specified must not include a path. Returns 1 if call is successful and 0 if unsuccessful. ═══ 10.1.26. xmodem_1k_send ═══ xmodem_1k_send filename,dde_output,dde_input Example Call xmodem_1k_send "filename.ext",dde_output,dde_input Description This call will invoke the 1K-Xmodem send routine, built into Pmcomm. Once issued the call will not return until the transfer either finishes or is aborted. Pmcomm will show the normal transfer dialog that it does when uploading from the menu. Returns 1 if call is successful and 0 if unsuccessful. ═══ 10.1.27. xmodem_1k_receive ═══ xmodem_1k_receive filename,dde_output,dde_input Example Call xmodem_1k_receive "filename.ext",dde_output,dde_input Description This call will invoke the 1K-Xmodem receive routine, built into Pmcomm. Once issued the call will not return until the transfer either finishes or is aborted. Pmcomm will show the normal transfer dialog that it does when downloading from the menu. The file will be downloaded into the download directory. The file name specified must not include a path. Returns 1 if call is successful and 0 if unsuccessful. ═══ 10.1.28. ymodem_send ═══ ymodem_send filename,dde_output,dde_input Example Call ymodem_send "filename.ext",dde_output,dde_input Description This call will invoke the Ymodem send routine, built into Pmcomm. Once issued the call will not return until the transfer either finishes or is aborted. Pmcomm will show the normal transfer dialog that it does when uploading from the menu. You may send multiple files by specifying more than file name. Returns Number of files transferred. ═══ 10.1.29. ymodem_receive ═══ ymodem_receive dde_output,dde_input Example Call ymodem_receive dde_output,dde_input Description This call will invoke the Ymodem receive routine, built into Pmcomm. Once issued the call will not return until the transfer either finishes or is aborted. Pmcomm will show the normal transfer dialog that it does when downloading from the menu. The file will be downloaded into the download directory. This one call will receive multiple files. The filenames used are the ones sent from the remote computer. Returns Number of files transferred. ═══ 10.1.30. ymodemg_send ═══ ymodemg_send filename,dde_output,dde_input Example Call ymodemg_send "filename.ext",dde_output,dde_input Description This call will invoke the Ymodem-g send routine, built into Pmcomm. Once issued the call will not return until the transfer either finishes or is aborted. Pmcomm will show the normal transfer dialog that it does when uploading from the menu. You may send multiple files by specifying more than file name. Returns Number of files transferred. ═══ 10.1.31. ymodemg_receive ═══ ymodemg_receive dde_output,dde_input Example Call ymodemg_receive dde_output,dde_input Description This call will invoke the Ymodem-g receive routine, built into Pmcomm. Once issued the call will not return until the transfer either finishes or is aborted. Pmcomm will show the normal transfer dialog that it does when downloading from the menu. The file will be downloaded into the download directory. This one call will receive multiple files. The filenames used are the ones sent from the remote computer. Returns Number of files transferred. ═══ 10.1.32. zmodem_send ═══ zmodem_send filename,dde_output,dde_input Example Call zmodem_send "filename.ext",dde_output,dde_input Description This call will invoke the Zmodem send routine, built into Pmcomm. Once issued the call will not return until the transfer either finishes or is aborted. Pmcomm will show the normal transfer dialog that it does when uploading from the menu. You may send multiple files by specifying more than file name. Returns Number of files transferred. ═══ 10.1.33. zmodem_receive ═══ zmodem_receive dde_output,dde_input Example Call zmodem_receive dde_output,dde_input Description This call will invoke the Zmodem receive routine, built into Pmcomm. Once issued the call will not return until the transfer either finishes or is aborted. Pmcomm will show the normal transfer dialog that it does when downloading from the menu. The file will be downloaded into the download directory. This one call will receive multiple files. The filenames used are the ones sent from the remote computer. Returns Number of files transferred. ═══ 10.1.34. kermit_send ═══ kermit_send filename,dde_output,dde_input Example Call kermit_send "filename.ext",dde_output,dde_input Description This call will invoke the Kermit send routine, built into Pmcomm. Once issued the call will not return until the transfer either finishes or is aborted. Pmcomm will show the normal transfer dialog that it does when uploading from the menu. You may send multiple files by specifying more than file name. Returns Number of files transferred. ═══ 10.1.35. kermit_receive ═══ kermit_receive dde_output,dde_input Example Call kermit_receive dde_output,dde_input Description This call will invoke the Kermit receive routine, built into Pmcomm. Once issued the call will not return until the transfer either finishes or is aborted. Pmcomm will show the normal transfer dialog that it does when downloading from the menu. The file will be downloaded into the download directory. This one call will receive multiple files. The filenames used are the ones sent from the remote computer. Returns Number of files transferred. ═══ 10.1.36. ascii_send ═══ ascii_send filename,dde_output,dde_input Example Call ascii_send "filename.ext",dde_output,dde_input Description This call will invoke the ASCII send routine, built into Pmcomm. Once issued the call will not return until the transfer either finishes or is aborted. Pmcomm will show the normal transfer dialog that it does when uploading from the menu. Returns 1 if call is successful and 0 if unsuccessful. ═══ 10.1.37. ascii_receive ═══ ascii_receive filename,dde_output,dde_input Example Call ascii_receive "filename.ext",dde_output,dde_input Description This call will invoke the ASCII receive routine, built into Pmcomm. Once issued the call will not return until the transfer either finishes or is aborted. Pmcomm will show the normal transfer dialog that it does when downloading from the menu. The file will be downloaded into the download directory. The file name specified must not include a path. Returns 1 if call is successful and 0 if unsuccessful. ═══ 10.1.38. cisb_send ═══ cisb_send filename,dde_output,dde_input Example Call cisb_send "filename.ext",dde_output,dde_input Description This call will invoke the CISB send routine, built into Pmcomm. Once issued the call will not return until the transfer either finishes or is aborted. Pmcomm will show the normal transfer dialog that it does when uploading from the menu. Returns 1 if call is successful and 0 if unsuccessful. ═══ 10.1.39. cisb_receive ═══ cisb_receive filename,dde_output,dde_input Example Call cisb_receive "filename.ext",dde_output,dde_input Description This call will invoke the CISB receive routine, built into Pmcomm. Once issued the call will not return until the transfer either finishes or is aborted. Pmcomm will show the normal transfer dialog that it does when downloading from the menu. The file will be downloaded into the download directory. The file name specified must not include a path. Returns 1 if call is successful and 0 if unsuccessful. ═══ 10.2. Internal Functions ═══ These are script functions that are built into Pmcomm. ═══ 10.2.1. wait_for (internal) ═══ wait_for("string"); This will wait until the word 'string' is received. One use of this is when logging onto a BBS you can have it wait until prompted for a first name. ═══ 10.2.2. puts ═══ puts("string"); This will send string to the comport. The 'C' language special character '\r','\n','\b',and '\a' can also be used. The \r means carriage return. The \n means carriage return and line feed combination. The \b means backspace. The \a means alert (Pmcomm will beep). ═══ 10.2.3. sleep (internal) ═══ sleep(1000); This will wait for the number of milliseconds specified. In this example it would sleep for one second. ═══ 10.2.4. call ═══ call("filename"); This allows you to nest scripts. If you put the name of the script that you want to execute where it says filename, it will execute that script and then continue. The limit on number of nested scripts is only by available stack space. ═══ 10.2.5. capture_on ═══ capture_on("filename"); Captures all screen output to a file. Replace filename with the name of the file you want the output written to. The capture file will be automatically closed when you log off, if you have Monitor_DCD selected. ═══ 10.2.6. capture_off ═══ capture_off(); Stops screen capture and closes the capture file. You can also close the capture file from the menu. ═══ 10.2.7. shell ═══ shell("\path\filename.ext"); Allows you to call an external program to run from a script. ═══ 10.3. 'C' Functions ═══ These are the functions that are included in the cpmcomms and cpmcomml libraries. The cpmcomms.lib is a small model library and the cpmcomml.lib is a large model library. The cpmcomm.h file has function definitions and should be included in any program that uses the cpmcomm libraries. The function init_lib must be called before any other of the library routines are used. ═══ 10.3.1. wait_for ═══ USHORT wait_for(USHORT argc,CHAR **argv,HFILE port); Example USHORT result; CHAR *argv[2]; CHAR string1[80]; CHAR string2[80]; strcpy(string1,"first name?"); strcpy(string2,"last name?"); argv[0] = string1; argv[1] = string2; result = wait_for(2,argv,port); Description The above example would wait for either first name?, or last name?, from the com port. The function will return the index of the string that matched. For example if the wait_for received last name?, then the result would be 2. You can specify any number of strings depending on memory available. Returns Index of matched string or zero if timeout or error. ═══ 10.3.2. wait_fore ═══ USHORT wait_fore(USHORT argc,CHAR **argv,HFILE port, HFILE screen_handle); Example USHORT result; CHAR *argv[2]; CHAR string1[80]; CHAR string2[80]; strcpy(string1,"first name?"); strcpy(string2,"last name?"); argv[0] = string1; argv[1] = string2; result = wait_for(2,argv,port,screen_handle); Description The first example would wait for either first name?, or last name?, from the com port and echo the out_put to the Pmcomm screen. Returns Index of matched string or zero if timeout or error. ═══ 10.3.3. put_s ═══ USHORT put_s(char *string,HFILE port); Example put_s("first name",port); Description This call will send string out to port. In the above example first name will be sent to the com port. If screen_handle is specified instead of port then the string will be sent to the Pmcomm screen. Returns Length of string actually written. ═══ 10.3.4. sleep ═══ VOID sleep(ULONG time); Example sleep(1000L); Description This call will delay the program for the amount of milliseconds specified. The above example will delay the computer for one second. Returns None. ═══ 10.3.5. beep ═══ VOID beep(USHORT frequency,USHORT duration); Example beep(495,100); Description The above example will beep the speaker. Returns None. ═══ 10.3.6. os2_shell ═══ VOID os2_shell(HFILE port,HFILE port); Example os2_shell(port,port); Description This command will allow a caller to shell to OS/2, remotely. The first parameter is input handle and the second is the output handle. In the example above, the command will receive and send the information to the com port. Returns None. ═══ 10.3.7. init_lib ═══ USHORT init_lib(int argc,char **argv); Example main(argc,argv) { init_lib(argc,argv); ... } The init_lib function will initialize some global variables that are passed on the command line. These variables are: USHORT port; CHAR portname[15]; HFILE dde_output,dde_input; HFILE screen_handle; This function must be called before any other library function is called. Returns 1 if sucessful and 0 if not. ═══ 10.3.8. 'C' set_download_path ═══ VOID set_download_path(char *path); Example set_download_path("c:\pmcomm"); Description The above example will set the download path to c:\pmcomm. This will store all of the files received in that directory. Returns None. ═══ 10.3.9. setcom ═══ SHORT setcom(char *baud,UCHAR parity,UCHAR data_bit,UCHAR stop_bits,HFILE port); Example setcom("2400",'N',8,1,port); Description This would set the com port to 2400 baud, no parity, 8 data bits, 1 stop bit. Baud can be from 300 to 19200 with the standard OS/2 device driver. Parity can be N(none), O(odd), E(even), M(marked), or S(spaced). Data bits can be 5, 6, 7 or 8. Stop bits can be 1 or 2 (2 can only be used with 5 data bits). If the baud parameter is an empty string i.e. setcom("",'E',7,1,port) this leave the baud at the current rate but set the line characteristics to 7, Even, 1. Returns 1 if successful and 0 if unsuccessful. ═══ 10.3.10. sendb ═══ VOID sendb(LONG length,HFILE port); Example sendb(300L,port); Description This call sends a break signal a certain time in milliseconds. The above example would send a break signal for 300 milliseconds. This call is mostly used to establish direct connects (not using a modem). Three hundred milliseconds should be okay for most situations. Returns None. ═══ 10.3.11. dcd ═══ USHORT dcd(HFILE port); Example dcd(port); Description This call checks to see if there is a carrier detected on the modem. You can use this to see if Pmcomm is still online to a remote computer. For this information to be correct the modem must support dcd and the modem must be configured to support dcd. To find the command refer to your owner's manual. Returns 1 if carrier detected and 0 if no carrier. ═══ 10.3.12. char_avail ═══ USHORT char_avail(HFILE port); Example char_avail(port); Description This call checks to see how many characters are available in the device drivers receive buffer. You can use this function to check to see if the device driver has received any characters from the com port. Returns Number of characters in device driver receive queue. ═══ 10.3.13. read_timeout ═══ read_timeout(USHORT timeout,HFILE port); Example read_timeout(20000,port); Description This call sets the length of time (in milliseconds) that wait_for, wait_fore, get_ch will wait for a character from the com port. The above example will make the functions wait for 20 seconds. Returns 1 if successful and 0 if unsuccessful. ═══ 10.3.14. get_ch ═══ CHAR get_ch(HFILE port); Example ch = get_ch(port); Description This call will get a character from the com port. If no character is available by the time set with read_timeout the function will return with a value of -1. Otherwise the function will return with the character read. Returns char value if successful and -1 if unsuccessful. ═══ 10.3.15. ring_detect ═══ USHORT ring_detect(HFILE port); Example ring_detect(port); Description This call can be used to inform a program if the phone is ringing. Returns 1 if ring detected, 0 if no ring. ═══ 10.3.16. drop_dtr ═══ VOID drop_dtr(HFILE port); Example drop_dtr(port); Description This call is usually used to make a modem hang up. The modem must be configured to allow this. To find the command for your modem, check your owner's manual. Dtr needs to be dropped for about 2-3 seconds to make sure the modem sees the drop in DTR. After that length of time raise_dtr can be called to bring DTR back up. On a Hayes 2400 the above command will also keep the modem from doing an auto answer until you raise_dtr again. Returns None. ═══ 10.3.17. raise_dtr ═══ VOID raise_dtr(HFILE port); Example raise_dtr(port); Description This call is usually used after drop_dtr to allow the modem to process commands and enable it to answer the phone. Returns None. ═══ 10.3.18. get_cursor_position ═══ USHORT get_cursor_position(char *str); Example get_cursor_position("column"); Description The above will return the column that the cursor is in. To get the current row, you would issue this call with "row" instead of "column". The row value that is returned is relative to the top of the scroll back buffer. The top row of the scroll back buffer and the first column would be 0,0. Returns Cursor position. ═══ 10.3.19. get_char_at ═══ VOID get_char_at(USHORT row,USHORT col,USHORT num,char *returnstr); Example get_char_at(0,0,80,str); Description The above will return the characters at the first line (stored in str) of the scroll back buffer. It will return 80 characters, even if the characters are spaces. The maximum number of characters that can be returned at one time is 200. Returns None. ═══ 10.3.20. 'C'capture_on ═══ USHORT capture_on(filename); Example capture_on("c:\pmcomm\cap.txt"); Description The above will turn capture on so that everything will be saved into a file. If you have strip ANSI configured in Pmcomm then the text only will be saved in ANSI, and VT100 terminal emulation. Returns 1 if successful and 0 if not. ═══ 10.3.21. 'C' capture_off ═══ VOID capture_off(VOID); Example capture_off(); Description The above will turn capture off. The capture may have been started from a script or from the menu. Returns 1 if successful and 0 if not. ═══ 10.3.22. xmodem_send ═══ USHORT xmodem_send(char *filename); Example xmodem_send("d:\path\filename.ext"); Description This call will invoke the Xmodem_CRC send routine, built into Pmcomm. Once issued the call will not return until the transfer either finishes or is aborted. Pmcomm will show the normal transfer box that it does when download is selected from the menu. Returns 1 if the transfer is successful and 0 if unsuccessful. ═══ 10.3.23. xmodem_receive ═══ USHORT xmodem_receive(char *filename); Example xmodem_receive("d:\path\filename.ext"); Description This call will invoke the Xmodem_CRC receive routine, built into Pmcomm. Once issued the call will not return until the transfer either finishes or is aborted. Pmcomm will show the normal transfer box that it does when uploading from the menu. The file name specified must include a path. Returns 1 if transfer is successful and 0 if unsuccessful. ═══ 10.3.24. xmodem_chk_send ═══ USHORT xmodem_chk_send(char *filename); Example xmodem_chk_send("d:\path\filename.ext"); Description This call will invoke the Xmodem_Checksum send routine, built into Pmcomm. Once issued the call will not return until the transfer either finishes or is aborted. Pmcomm will show the normal transfer box that it does when download is selected from the menu. Returns 1 if transfer is successful and 0 if unsuccessful. ═══ 10.3.25. xmodem_chk_receive ═══ USHORT xmodem_chk_receive(char *filename); Example xmodem_chk_receive("d:\path\filename.ext"); Description This call will invoke the Xmodem_Checksum receive routine, built into Pmcomm. Once issued the call will not return until the transfer either finishes or is aborted. Pmcomm will show the normal transfer box that it does when uploading from the menu. The file name specified must include a path. Returns 1 if transfer is successful and 0 if unsuccessful. ═══ 10.3.26. xmodem_1k_send ═══ USHORT xmodem_1k_send(char *filename); Example xmodem_1k_send("d:\path\filename.ext"); Description This call will invoke the 1K-Xmodem send routine, built into Pmcomm. Once issued the call will not return until the transfer either finishes or is aborted. Pmcomm will show the normal transfer box that it does when download is selected from the menu. Returns 1 if transfer is successful and 0 if unsuccessful. ═══ 10.3.27. xmodem_1k_receive ═══ USHORT xmodem_1k_receive(char *filename); Example xmodem_1k_receive("d:\path\filename.ext"); Description This call will invoke the 1K-Xmodem receive routine, built into Pmcomm. Once issued the call will not return until the transfer either finishes or is aborted. Pmcomm will show the normal transfer box that it does when uploading from the menu. The file name specified must include a path. Returns 1 if transfer is successful and 0 if unsuccessful. ═══ 10.3.28. ymodem_send ═══ USHORT ymodem_send(USHORT num_files,CHAR **filearray); Example USHORT result; CHAR *filearray[2]; CHAR string1[80]; CHAR string2[80]; strcpy(string1,"pmcom106.zip"); strcpy(string2,"pmcom107.zip"); filearray[0] = string1; filearray[1] = string2; result = ymodem_send(2,filearray); Description This call will invoke the Ymodem send routine, built into Pmcomm. Once issued the call will not return until the transfer either finishes or is aborted. Pmcomm will show the normal transfer box that it does when download is selected from the menu. As many as 8 files can be sent at one time. Returns Number of files successfully transferred. ═══ 10.3.29. ymodem_receive ═══ USHORT ymodem_receive(VOID); Example ymodem_receive(); Description This call will invoke the Ymodem receive routine, built into Pmcomm. Once issued the call will not return until the transfer either finishes or is aborted. Pmcomm will show the normal transfer box that it does when uploading from the menu. Only a single file at a time will be accepted. Returns 1 if call is successful and 0 if unsuccessful. ═══ 10.3.30. ymodemg_send ═══ USHORT ymodemg_send(USHORT num_files, CHAR **filearray); Example USHORT result; CHAR *filearray[2]; CHAR string1[80]; CHAR string2[80]; strcpy(string1,"pmcom106.zip"); strcpy(string2,"pmcom107.zip"); filearray[0] = string1; filearray[1] = string2; result = ymodemg_send(2,filearray); Description This call will invoke the Ymodem-g send routine, built into Pmcomm. Once issued the call will not return until the transfer either finishes or is aborted. Pmcomm will show the normal transfer box that it does when downloading from the menu. As many as 8 files can be sent at one time. Returns Number of files successfully transferred. ═══ 10.3.31. ymodemg_receive ═══ USHORT ymodemg_receive(VOID); Example ymodemg_receive(); Description This call will invoke the Ymodem-g receive routine, built into Pmcomm. Once issued the call will not return until the transfer either finishes or is aborted. Pmcomm will show the normal transfer box that it does when uploading from the menu. Only one file at a time can be received. Returns 1 if call is successful and 0 if unsuccessful. ═══ 10.3.32. zmodem_send ═══ USHORT zmodem_send(USHORT num_files, CHAR **filearray); Example USHORT result; CHAR *filearray[2]; CHAR string1[80]; CHAR string2[80]; strcpy(string1,"pmcom106.zip"); strcpy(string2,"pmcom107.zip"); filearray[0] = string1; filearray[1] = string2; result = zmodem_send(2,filearray); Description This call will invoke the Zmodem send routine, built into Pmcomm. Once issued the call will not return until the transfer either finishes or is aborted. Pmcomm will show the normal transfer box that it does when downloading from the menu. As many as 100 files may be transferred at one time. Returns Number of files successfully transferred. ═══ 10.3.33. zmodem_receive ═══ USHORT zmodem_receive(VOID); Example zmodem_receive(); Description This call will invoke the Zmodem receive routine, built into Pmcomm. Once issued the call will not return until the transfer either finishes or is aborted. Pmcomm will show the normal transfer box that it does when uploading from the menu. Only one file at a time can be received. Returns The number of files transferred. ═══ 10.3.34. kermit_send ═══ USHORT kermit_send(USHORT num_files, CHAR **filearray); Example USHORT result; CHAR *filearray[2]; CHAR string1[80]; CHAR string2[80]; strcpy(string1,"pmcom106.zip"); strcpy(string2,"pmcom107.zip"); filearray[0] = string1; filearray[1] = string2; result = kermit_send(2,filearray); Description This call will invoke the Kermit send routine, built into Pmcomm. Once issued the call will not return until the transfer either finishes or is aborted. Pmcomm will show the normal transfer box that it does when downloading from the menu. As many as 100 files may be transferred at one time. Returns Number of files successfully transferred. ═══ 10.3.35. kermit_receive ═══ USHORT kermit_receive(VOID); Example kermit_receive(); Description This call will invoke the Kermit receive routine, built into Pmcomm. Once issued the call will not return until the transfer either finishes or is aborted. Pmcomm will show the normal transfer box that it does when uploading from the menu. Only one file at a time can be received. Returns Number of files transferred. ═══ 10.3.36. ascii_send ═══ USHORT ascii_send(char *filename); Example ascii_send("d:\path\filename.ext"); Description This call will invoke the ASCII send routine, built into Pmcomm. Once issued the call will not return until the transfer either finishes or is aborted. Pmcomm will show the normal transfer box that it does when downloading from the menu. Returns 1 if transfer is successful and 0 if unsuccessful. ═══ 10.3.37. ascii_receive ═══ USHORT ascii_receive(filename); Example ascii_receive("d:\path\filename.ext"); Description This call will invoke the ASCII receive routine, built into Pmcomm. Once issued the call will not return until the transfer either finishes or is aborted. Pmcomm will show the normal transfer box that it does when uploading from the menu. The file name specified must not include a path. Returns 1 if transfer is successful and 0 if unsuccessful. ═══ 10.3.38. cisb_send ═══ USHORT cisb_send(char *filename); Example cisb_send("d:\path\filename.ext"); Description This call will invoke the CISB send routine, built into Pmcomm. Once issued the call will not return until the transfer either finishes or is aborted. Pmcomm will show the normal transfer box that it does when download is selected from the menu. Returns 1 if the transfer is successful and 0 if unsuccessful. ═══ 10.3.39. cisb_receive ═══ USHORT cisb_receive(char *filename); Example cisb_receive("d:\path\filename.ext"); Description This call will invoke the CISB receive routine, built into Pmcomm. Once issued the call will not return until the transfer either finishes or is aborted. Pmcomm will show the normal transfer box that it does when uploading from the menu. The file name specified must include a path. Returns 1 if transfer is successful and 0 if unsuccessful. ═══ 10.4. Sample Scripts ═══ These are scripts to help you, when you start to write your own scripts. ═══ 10.4.1. REXX Sample ═══ /* Sample Script*/ /* This script will allow you to log on to Compu-Plane once you change the strings stored in the variables called name and pass. Enter the sample.scr name for the script name of the Compu-Plane phone number, and change the name in the shell( ) function to the path and filename of this file.*/ Call RxFuncadd "init_dll","RxPmcomm","init_dll" /* This function registers the init_dll function with REXX. The init_dll function will register the rest of the functions in the rxpmcomm.dll. */ Parse arg port portname screen_handle dde_output dde_input semaphore /*These are the values that Pmcomm passes on the command line to an external program. These values can then be used in different REXX functions along with the rxpmcomm.dll functions. Following is the description of each value: */ /* port = The handle of the open com port in Pmcomm */ /* portname = The name of the opened com port ie.. COM1*/ /* screen_handle = Anything written to the handle will be printed on the Pmcomm screen. */ /* dde_input = This must be passed to most functions. It allows the rxpmcomm.dll function to communicate with Pmcomm. */ /* dde_output = This must be passed to most functions. It allows the rxpmcomm.dll function to communicate with Pmcomm. */ /* semaphore = This also must be passed to any file transfer function. It makes your REXX program wait until the transfer has been completed. */ Call init_dll /* Required before any other rxpmcomm.dll functions are called. */ /* Setup variables */ name = 'first;last' /* where first is your first name and last is*/ pass = 'password' /* your last name and password is your password.*/ cr = '0d'x Call read_timeout '20000',port /* This sets the read timeout for 20 seconds. This is used in the Wait_for, Wait_fore, and the Get_ch functions. */ Say 'Waiting for first name ...' /* This will be printed on the REXX screen. */ Do Forever Call Wait_fore 'name', 'password', 'continue?','?->', port, screen_handle /* This call will echo all characters to the Pmcomm screen that come from the open com port. When one of the strings are matched the function will return the index of the matched string in the variable result. For example if it receives the string password then the result will be equal to 2. If the function waits longer then the read timeout value then result will be equal to 0. */ match = result Select When match=1 then Do Call Put_s name||cr,port Say 'Waiting for password ...' End When match=2 then Call Put_s pass||cr,port When match=3 then Call Put_s cr,port When match=4 then Exit Otherwise nop End End Say 'Script ended -' date( ) time( ) Exit ═══ 10.4.2. Internal Sample ═══ An example script to log onto a Multi-Net Communications BBS could be: wait_for ("first name"); puts ("john\n"); wait_for("last name"); puts("doe\n"); wait_for("password"); puts("password\n"); sleep (1000); puts("\n"); Scripts can be executed automatically when logging onto a BBS by specifying the script filename in the dialing directory for that phone number. You can execute a script from the File menu at anytime. ═══ 11. Installing Pmcomm Host Mode ═══ To install Pmcomm's Host Mode, change to the Pmcomm directory and run the host.exe program. The first prompt will ask you to enter the maximum baud rate of your modem. At the next prompt you must enter the number of selection that matches your modem the closest. If you are unsure of which selection to make, choose the Hayes 2400 modem as your selection. Next, you must enter the path, including drive, of where you wish to install the Host Mode. When prompted, enter your first name, last name, and password. The install program automatically creates a password file in the necessary format. If this is an "open" system new users will be stored in this file automatically. If this is a "closed" system only the people that are registered in this file will be able to access the Host Mode. The six files that the install program creates are HOSTPASS.FLE, HOSTDIR.FLE, HOSTHEAD.FLE, HOST.SCR, HOSTNEWU.FLE, and HOSTHELP.FLE. The HOSTPASS.FLE file is where all of the users' names, passwords, securities, and last time on are stored. The HOSTDIR.FLE file is a list of the directories that have been created for the host mode. The HOSTHEAD.FLE file is the file that is displayed to users when they logon. The HOST.SCR file is the main executable script. The HOSTNEWU.FLE file is the file that is displayed to new users. In order for a user to be able to receive help from the menu, the HOSTHELP.FLE must contain the information that will be displayed. ═══ 12. How To... ═══ This section gives you examples of how to set Pmcomm up to do different things. ═══ 12.1. How to make Pmcomm receive incoming calls. ═══ To make Pmcomm receive an incoming call without using the Host Mode, send the following command to the modem. ATS0=1 ═══ 12.2. How to Use Pmcomm with a modem pool. ═══ Because Pmcomm does not use ACDI, and will allow you to enter any valid 12 character name for a device, it will work with a shared serial port modem pool. This allows you to have modems on a server that users can access from their workstations. This can save a considerable about of money. First the ibmlan.ini file, on the Server and the Requesters, must be edited in order to operate Pmcomm in a modem pool. The "charwait" variable must be changed from it's default setting of 3600 to a setting of 3 and then re-boot the Server and all of the Requesters. The following is a flash from IBMLink on how to setup a modem pool using Pmcomm and Lan Server. The rest of this scenario concerns the OS/2 LAN Server definitions. When LAN Server definitions and actions are complete, defined users at any OS/2 Requestor can run the program from the OS/2 Public Applications Window. The serial port and modem at the LAN Server will be shared. To begin, logon as an administrator in the proper domain. Then follow instructions for the following: a. Defining the shared modem b. Defining the shared program files c. Defining the program as a public OS/2 application d. Defining the working directory e. Sharing the modem and the program f. Assigning the modem and the program to the users as they log on. DEFINING THE SHARED MODEM Follow this sequence: DEFINITION ALIASES SERIAL DEVICES --NEW-- (With cursor on --NEW--, press space bar to choose, press enter or click on ACTION) CREATE(Create a serial device alias - I used an alias of MODEM1, chose COM1 from the device pool using F4 for the list, and choose to share the port at server startup) *-----------------------------------------------------------* Create Alias - Serial Device Complete the panel; then Enter. Alias . . . . . . . . . . . . . . . MODEM1 Description . . . . . . . . . . . . Shared modem Server Name . . . . . . . . . . . . Chosen with the F4 key Server Device Pool. . . . . . . . . COM1 Priority. . . . . . . . . . . . . . 5 (chosen arbitrarily) Maximum number of users . . . . . . (Number of shared serial ports) When shared . . . . . . . . . > At server startup |-----------------------------------------------------------| ENTER Escape=Cancel F1=Help F4=List *-----------------------------------------------------------* DEFINING THE SHARED PROGRAM FILES Follow this sequence: DEFINITION ALIASES FILES --NEW-- (With cursor on --NEW--, press space bar to choose, press enter or click on ACTION) CREATE (Create the file alias) *---------------------------------------------------------* Create Alias - Files Complete the panel; then Enter. Alias . . . . . . . . . . . . . . . PMCOMM Description . . . . . . . . . . . . Program to access shared modem Server Name . . . . . . . . . . . . Chosen with the F4 key Server Path to Directory. . . . . . :OS2:ASYNC:PMCOMM Maximum number of users . . . . . . (left blank) When shared . . . . . . . . . > At server startup |---------------------------------------------------------| ENTER Escape=Cancel F1=Help F4=List *---------------------------------------------------------* DEFINING THE PROGRAM AS A PUBLIC OS/2 APPLICATION Follow this sequence: DEFINITION APPLICATION PUBLIC OS/2 APPLICATION --NEW-- (With cursor on --NEW--, press space bar to choose, press enter or click on ACTION) CREATE *----------------------------------------------------------* Create OS/2 Application Details Complete the panel; then Enter. Application ID. . . . . . . . . . . PMCOMMX Description . . . . . . . . . . . . Shared modem communications Program location. . . . . . . . . . Remote Drive or alias. . . . . . . . . . . PMCOMM Remaining path to program . . . . . : Command line. . . . . . . . . . . . PMCOMM.EXE Prompt used for parameters? . . . . NO Program type. . . . . . . . . . . . OS/2 PM |----------------------------------------------------------| ENTER Escape=Cancel F1=Help F4=List *----------------------------------------------------------* DEFINING THE WORKING DIRECTORY PMCOMM has support files that should reside in the working directory at the server. If this directory is not assigned, each user must have these files on their own disk. Follow this sequence: DEFINITION APPLICATION PUBLIC OS/2 APPLICATION --PMCOMMX-- (With cursor on --PMCOMMX--, press space bar to choose, press enter or click on ACTION) WORKING DIRECTORY *---------------------------------------------------------* Working Directory Complete the panel; then Enter. Working Directory . . . . . . . . . REMOTE Drive or alias. . . . . . . . . . . PMCOMM Remaining path to program . . . . . : Assigned Drive. . . . . . . . . . . P (chosen arbitrarily) |---------------------------------------------------------| ENTER Escape=Cancel F1=Help F4=List *---------------------------------------------------------* SHARING THE PROGRAM AND THE MODEM Follow this sequence: ACTION RESOURCE SHARING --PMCOMM-- (With cursor on --PMCOMM--, press spacebar to choose, press enter or click on ACTION) START SHARING --MODEM1-- (With cursor on --MODEM1--, press spacebar to choose, press enter or click on ACTION) START SHARING ASSIGNING RESOURCES TO USERS AS THEY LOG ON Follow this sequence for each user, to assign MODEM1 as a user logs on: DEFINITION USERS -- User -- (With cursor on the user name, press F10) LOGON SERIAL DEVICE ASSIGNMENTS Assign MODEM1 to a COM port Follow this sequence for each user, to copy the program to the user's START PROGRAMS window: DEFINITION USERS -- User -- (With cursor on the user name, press spacebar to choose, press enter or click on ACTION) PROGRAM STARTER --PMCOMMX-- (With cursor on --PMCOMMX-- press the spacebar to choose) ═══ 12.3. How to Use Pmcomm with IBMLink. ═══ If you have access to IBMLink (ask an IBM SE) you can use Pmcomm to call. The first thing you will need is a phone number that will work with Pmcomm. This type of number is call, an SS/EFS number. This stands for, Start Stop Enhanced Full Screen. It allows access to IBMLink through a 3708 protocol converter. To find a number in your area, ask your IBM SE, or order book number GC-34-22-34. It has a current list of all the public IBMLink phone numbers in it. Once you have the required phone number, you can add it to the Pmcomm dialing directory. You should set the Parity to Even,the Data bits to 7, and the Stop bits to 1. The terminal type should be set to VT100. Once connected you will see a prompt that asks you for your terminal type. If you press enter now it will display a list of available terminals. The best choice here is to select VT220, which is selection 18. Pmcomm supports most of the VT220 commands when in VT100 mode, and it supports all that are used with IBMLink. By selecting VT220 you are able to use additional commands that are not available with VT100. If you select VT220 the first nine PF keys will be the numeric key pad keys (the num lock must be off). For example, PF1 will be the 1 on the key pad, PF2 will be 2 and so on. For PF10 it will be the F1 key, PF11 will be the F2 key and PF12 will be the F3 key. To do a reset press the Ctrl-R and to do a clear press the Ctrl-C. Once logged onto IBMLink just follow the prompts and you shouldn't have any problem. ═══ 12.4. How to Use Pmcomm with ESDTools. ═══ Once you are logged onto ESDTools and have selected the files you wish to receive, press the PF9 key (using VT220 this is the 9 on the numeric keypad). ESDTools will then ask you which drive you will be receiving the file to. Choose any drive as this parameter will be ignored by Pmcomm. You will then be prompted for the operating system, select OS/2. The last selection will be for the type of connection (i.e. Asynch ect...), select the appropriate connection type. ESDTools will then tell you not to press the enter key until prompted to do so by your communications software. At this time select Transfer, Download from the Pmcomm menu. Once the transfer has completed you can then press the enter key to return to the file list menu. ═══ 12.5. How to Use a REXX program as a script. ═══ A REXX program can be executed from Pmcomm by entering the name of the program name directly into the dialing_directory or from the start script menu. A REXX program can also be started by using the shell command in a macro. An example of this would be: shell("c:\pmcomm\plane.cmd"); This would execute the REXX script called plane.cmd. This allows you a quick and easy way to execute often used scripts. ═══ 12.6. How to Use drag and drop. ═══ When files are dragged from the file manager and dropped onto Pmcomm's terminal emulation screen, the transfer protocol that is listed for that phone number will be invoked and the file(s) will be sent to the remote computer. If you have Monitor_DCD selected then drag options will not be allowed until connected with another computer. To drag files from the file manager, select a file (or files) and then click on the selected file(s) with the RIGHT mouse button and hold the button down. Once you have begun to drag the files with the mouse the mouse pointer will change shape. If the mouse pointer is over a program that does not accept drag and drop the pointer will again change shape. When the mouse pointer is over any part of Pmcomm you can release the right mouse button. This will drop the files onto Pmcomm and Pmcomm will send them. This will even work if Pmcomm is an icon. To change the protocol for the current phone number, select upload from the menu and then select the protocol you want (make sure that the save to dialing directory is selected). After pressing the OK button the file open dialog box will be displayed. Just press cancel and you can now use the drag and drop with the new protocol. If a file is dropped onto Pmcomm while it is an icon in a group menu, this file will be used as a setup file, and Pmcomm will be invoked. The drag and drop feature is also available for two of the icons on the Status Line. For more information see Status_Line. ═══ 13. Troubleshooting. ═══ Following are some problems that may occur when using Pmcomm. ═══ 13.1. Device Open error. ═══ This message is displayed if Pmcomm can not open the specified device. If you are trying to open COM1, for example, and another program already has it open then this message will be displayed. If you are using the com ports on the machine you are running Pmcomm on (not across a LAN). Then you must have the com port device driver installed. There are two device drivers supplied with OS/2, com02.sys (for IBM PS/2's), and com01.sys for AT class machines. If you are running a PS/2, for example, you should have a statement in your config.sys file, DEVICE=C:\OS2\COM02.SYS. If not you will get the device open error. The default when installing OS/2 is not to install the device driver, so make sure that you either have, DEVICE=C:OS2\COM02.SYS or DEVICE=C:\OS2\COM01.SYS in your config.sys file. If you get this message when trying to access a com port on a server, refer to the Modem_Pool section. One of the common problems is not first logging onto the network before trying to access the com port. Also make sure you use Alias names that don't conflict with names on the local machine. For example don't try to use the name COM1 for the name of the remote com port. Instead use a name like MODEM1 or PMCOMM1. ═══ 13.2. File transfers not available. ═══ If you have Monitor_DCD turned on under Port Options and Pmcomm does not detect DCD then the upload and download options will be greyed out. You can turn the Monitor DCD option off and you will then be able to transfer files. Some common reasons for Pmcomm not being able to detect are: Serial cable that does not support the DCD line. Modem not configured to have DCD follow the state of the phone line. Modem does not support DCD. The monitor DCD option should also be turned off if using Pmcomm with a modem pool. ═══ 13.3. Pmcomm will not dial out. ═══ The most common cause of this is a DOS program that has corrupted the com port. Compiled basic program that are executed in the DOS box, for example, will sometime poll the available devices. When this happens the com device driver is effected and Pmcomm will not be able to send information to the com port. When this happens you will have to IPL (boot) the computer. ═══ 13.4. Typed characters do not echo to the screen. ═══ Some electronic information services, such as Genie, run in what is called "half-duplex" mode. When in this mode the typed characters are not echoed to the screen. Pmcomm's default mode is "full duplex" which lets the services, like Genie, echo the characters to the screen. To make Pmcomm echo the typed characters to the screen, select the Screen dialog box under the main Options menu and check local echo on. ═══ 13.5. Help not available. ═══ This message will be displayed if Pmcomm can not find the pmcomm.hlp file in the current directory. If you have Pmcomm installed in a Group menu make sure that you have the working directory set to the directory that Pmcomm is installed in. ═══ 13.6. Pmcomm locks with a shared serial port. ═══ If Pmcomm locks up when trying to access a shared serial port you must edit the ibmlan.ini file in the Server well as all of the Requesters. Change the variable "charwait" from its default of 3600, to 3 and then re-boot the Server and all of the Requesters.